package com.software.loginregister.util;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.software.loginregister.api.ChatApi;
import com.software.loginregister.api.AiServiceApi;
import com.software.loginregister.api.RefrigeratorApi;
import com.software.loginregister.api.UserApi;
import com.software.loginregister.api.UserHealthApi;
import com.software.loginregister.api.UserRelationApi;
import com.software.loginregister.api.WorksApi;

import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Retrofit 客户端类，用于创建和管理 Retrofit 实例。
 */
public class RetrofitClient {
    //csh
    public static final String BASE_URL = "http://192.168.72.113:8080/";

    private static RetrofitClient instance;

    /**
     * Retrofit 实例。
     */
    private final Retrofit retrofit;

    /**
     * 私有构造函数，用于初始化 Retrofit 客户端。
     */
    private RetrofitClient() {
        // 创建自定义的Gson实例
        Gson gson = new GsonBuilder()
                .setDateFormat("yyyy-MM-dd'T'HH:mm:ss")  // 设置与后端匹配的日期格式
                .create();

        // 添加日志拦截器
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);

        // 配置 OkHttpClient
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.SECONDS)  // 减少连接超时时间
                .readTimeout(5, TimeUnit.SECONDS)     // 减少读取超时时间
                .writeTimeout(5, TimeUnit.SECONDS)    // 减少写入超时时间
                .retryOnConnectionFailure(true)        // 启用连接失败重试
                .addInterceptor(logging)               // 添加日志拦截器
                .build();

        // 创建 Retrofit 实例
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();
    }

    /**
     * 获取 RetrofitClient 的单例实例。
     *
     * @return RetrofitClient 实例
     */
    public static synchronized RetrofitClient getInstance() {
        if (instance == null) {
            instance = new RetrofitClient();
        }
        return instance;
    }


    /**
     * 创建指定类型的 Retrofit 服务接口。
     *
     * @param serviceClass 服务接口的类
     * @param <T>          服务接口的泛型类型
     * @return 服务接口的实例
     */
    public <T> T create(Class<T> serviceClass) {
        return retrofit.create(serviceClass);
    }

    //      登录注册的接口
    public UserApi getUserApi() {
        return retrofit.create(UserApi.class);
    }

    //    作品列表接口
    public WorksApi getWorksApi() {
        return retrofit.create(WorksApi.class);
    }

    /**
     * 获取 UserHealthApi 接口实例。
     *
     * @return UserHealthApi 接口实例
     */
    public UserHealthApi getUserHealthApi() {
        return retrofit.create(UserHealthApi.class);
    }

    /**
     * 获取 RefrigeratorApi 接口实例。
     *
     * @return RefrigeratorApi 接口实例
     */
    public RefrigeratorApi getRefrigeratorApi() {
        return retrofit.create(RefrigeratorApi.class);
    }

    /**
     * 获取 UserRelationApi 接口实例。
     *
     * @return UserRelationApi 接口实例
     */
    public UserRelationApi getUserRelationApi() {
        return retrofit.create(UserRelationApi.class);
    }
    public ChatApi getChatApi() {
        return retrofit.create(ChatApi.class);
    }

    public AiServiceApi getAiserviceApi(){return retrofit.create(AiServiceApi.class);}

}
